int numDecodings(char * s){
    int len = strlen(s);
    int dp[len + 1];
    memset(dp, 0, sizeof(dp));
    dp[0] = 1;
    for (int i = 1; i <= len; i++) {
        if (s[i - 1] != '0') dp[i] += dp[i - 1];
        if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + s[i - 1] - '0' <= 26)) dp[i] += dp[i - 2]; 
    }
    return dp[len];
}

/******************空间优化***************/
int numDecodings(char * s){
    int len = strlen(s);
    int a = 0, b = 1, c;
    for (int i = 1; i <= len; i++) {
        c = 0;
        if (s[i - 1] != '0') c += b;
        if (i > 1 && s[i - 2] != '0' && ((s[i - 2] - '0') * 10 + s[i - 1] - '0' <= 26)) c += a;
        a = b;
        b = c; 
    }
    return c;
}